/**
 * JDEcrireMessage.java    27/03/2012
 */

package l3.info.projetJava.client;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

/**
 * JDialog permettant d'écrire un message
 * @author Loïc Martinez
 * @version 1.0
 */

public class JDEcrireMessage extends JDialog implements ActionListener {

    /** Constantes */
    private static final String TITRE = "Ecriture d'un message...";
    private static final String ENVOYER = "Envoyer";
    private static final String ANNULER = "Annuler";
    private static final int LARGEUR = 500;
    private static final int HAUTEUR = 445;
    private static final int ABSCISSE = 480;
    private static final int ORDONNEE = 150;
    private static final String MESSAGE = "Veuillez écrire votre " +
            "message ci-dessous";

    /** Composants de la JDialog */
    private JLabel label;
    private JButton boutonEnvoyer, boutonAnnuler;
    private JPanel panLabel, panArea, panBouton;
    private JTextArea champ;
    private JScrollPane scroll;

    /**
     * Pour savoir si on a appuyé sur envoyer ou annuler
     * pour la fenêtre parente
     */
    private boolean envoi = false;

    /**
     * Constructeur
     */
    public JDEcrireMessage() {
        setProperties();
        addComponents(FlowLayout.CENTER);
        setEnter();
        setVisible(true);
    }

    /**
     * Configuration des propriétés de la JFrame
     */
    private void setProperties() {
        setTitle(TITRE);
        setBounds(ABSCISSE, ORDONNEE, LARGEUR, HAUTEUR);
        setResizable(false);
        setModal(true);
        getContentPane().setLayout(new FlowLayout());
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    }

    /**
     * Ajout du label, du JTextArea et du bouton
     * @param alignement, la position des éléments
     */
    private void addComponents(int alignement) {
        panLabel = new JPanel(new FlowLayout(alignement));
        panLabel.setPreferredSize(new Dimension(LARGEUR, 30));
        label = new JLabel(MESSAGE);
        panLabel.add(label);
        add(panLabel);

        panArea = new JPanel(new FlowLayout(alignement));
        panArea.setPreferredSize(new Dimension(LARGEUR, 330));

        champ = new JTextArea(20, 42);
        champ.setBorder(BorderFactory.createLineBorder(Color.BLACK));
        champ.setLineWrap(true);

        scroll = new JScrollPane(champ);
        scroll.setHorizontalScrollBarPolicy(
                JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

        panArea.add(scroll);
        add(panArea);

        panBouton = new JPanel(new FlowLayout(alignement));
        panBouton.setPreferredSize(new Dimension(LARGEUR, 50));
        boutonEnvoyer = new JButton(ENVOYER);
        boutonEnvoyer.addActionListener(this);
        boutonAnnuler = new JButton(ANNULER);
        boutonAnnuler.addActionListener(this);
        panBouton.add(boutonEnvoyer);
        panBouton.add(boutonAnnuler);
        add(panBouton);
    }

    /**
     * Valeur de la JTextArea
     * @return la valeur de la JTextArea sans les espaces avant et
     * après la chaîne
     */
    public String getText() {
        return champ.getText().trim();
    }

    /**
     * On a appuyé sur envoyer et pas annuler
     * @return envoi, true si on a appuyé sur envoyer,
     *                false sinon
     */
    public boolean isEnvoye() {
        return envoi;
    }

    /**
     * Si on appuie sur Entrée, alors ça déclenche le listener
     * du bouton bouton
     */
    public void setEnter() {
        getRootPane().setDefaultButton(boutonEnvoyer);
    }

    /**
     * Permet de gérer les actions sur les ActionListeners
     * @param ev, l'évènement déclenché
     */
    public void actionPerformed(ActionEvent ev) {
        if (ev.getSource() == boutonEnvoyer) {
            envoi = true;
            setVisible(false);
            dispose();
        } else if (ev.getSource() == boutonAnnuler) {
            // envoi = false
            setVisible(false);
            dispose();
        }
    }
}
